package com.itheima.config;

import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.support.AbstractDispatcherServletInitializer;

/**
 * Description:
 *
 * @author codermao
 * @date 2023/11/5 16:06
 */

/**
 * TODO：问题（web.xml怎么不见了？ServletContainersInitConfig是用来干什么的？）
 *      回答：ServletContainersInitConfig配置类取代了web.xml
 *
 *      tomcat开启之后的执行流程：
 *          tomcat -> ServletContainersInitConfig -> SpringMvcConfig -> UserController
 *          原理：基于SPI机制
 *
 *      单次请求流程：
 *          浏览器(前端) -> (后端)tomcat -> DispatcherServlet(SpringMVC封装的: 前端控制器) -> UserController.save
 *
 */
//AbstractDispatcherServletInitializer类是SpringMVC提供的快速初始化Web3.0容器的抽象类
//web容器配置类
public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {
    //加载springmvc配置类，产生springmvc容器（本质还是spring容器）
    @Override
    protected WebApplicationContext createServletApplicationContext() {
//        AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);

        //初始化WebApplicationContext对象
        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
        //加载指定配置类
        ctx.register(SpringMvcConfig.class);
        return ctx;
    }

    //设置由springmvc控制器处理的请求映射路径
    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }

    //加载spring配置类
    @Override
    protected WebApplicationContext createRootApplicationContext() {
        return null;
    }
}
